package getOffer.offer65;

/**
 * @Author: wjy
 * @Date: 2021/11/15 13:07
 */
public class Solution {

    public static void main(String[] args) {

        Solution solution = new Solution();
        System.out.println(solution.add(4, 5));


    }

    /**
     * 加法在计算机中如何运算的，
     * 第一步：异或运算（如果不考虑进位异或就可以直接出结果）
     * 第二步：与运算（判断进位，如果与运算结果为0，没有进位）
     * 第三步：位运算（将与运算结果左移1位）
     * 第四步：异或运算（将第一步异或运算结果和第三步位运算结果进行异或运算）
     * 第五步：与运算（判断进位，如果与运算结果为0，没有进位）
     * @param a
     * @param b
     * @return
     */
    public int add(int a, int b) {
/*        int res = 0, temp = 0;

        while (true) {
            // 异或
            temp = a ^ b;
            // 与
            res = a & b;
            if (res == 0) {
                break;
            }
            // 左移1位
            b = res << 1;
            a = temp;
        }

        return temp;*/

        while (b != 0) {
            int c = (a & b) << 1;
            a ^= b;
            b = c;
        }

        return a;
    }

}
